<table class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">页面访问</th>
		</tr> 
	</thead> 
	 <tbody> 
	 	<tr> 
			<td  width="30%">请求路径</td> 
			<td  width="70%" colspan="2">findPassWord_step2.htm</td>
		</tr>
		<tr> 
			<td>请求方式</td> 
			<td colspan="2">GET</td>
		</tr>
		<tr> 
			<td>请求参数</td> 
			<td>用户名称</td> 
			<td>
				变量：userName<br>
				类型：String
			</td>
		</tr>
		<tr> 
			<td rowspan="3">返回值</td> 
			<td>用户</td> 
			<td>
				变量：user<br>
				类型：<a style="color: #317ee7" onclick="anchorJump('#anchor_40'); return false;">User</a>
			</td>
		</tr>
		<tr>
			<td>验证码编号</td> 
			<td>
				变量：captchaKey<br>
				类型：String
			</td>
		</tr>
	</tbody> 
</table>

<table class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">页面访问 - AJAX方式</th>
		</tr> 
	</thead> 
	 <tbody> 
	 	<tr> 
			<td  width="30%">请求路径</td> 
			<td  width="70%" colspan="2">findPassWord_step2.htm</td>
		</tr>
		<tr> 
			<td>请求方式</td> 
			<td colspan="2">GET</td>
		</tr>
		<tr> 
			<td>自定义请求头</td> 
			<td colspan="2">协议头：X-Requested-With  值：XMLHttpRequest</td>
		</tr>
		<tr> 
			<td>请求参数</td> 
			<td>用户名称</td> 
			<td>
				变量：userName<br>
				类型：String
			</td>
		</tr>
		<tr> 
			<td width="30%" rowspan="4">请求成功返回</td> 
			<td width="30%" rowspan="4">JSON格式值 类型:Map&ltString,Object></td>
			<td width="40%">键参数：success<br>值内容说明：成功返回true 失败返回false<br>值类型：String</td> 
		</tr>
		<tr> 
			<td>键参数：error<br>值内容说明：错误值集合<br>值类型：<a style="color: #317ee7" onclick="anchorJump('#anchor_80'); return false;">Map&ltString,String></a></td> 
		</tr>
		<tr> 
			<td>键参数：user<br>值内容说明：用户<br>值类型：<a style="color: #317ee7" onclick="anchorJump('#anchor_40'); return false;">User</a></td>
		</tr>
		<tr> 
			<td>键参数：captchaKey<br>值内容说明：验证码编号<br>值类型：String</td>
		</tr>	
	</tbody> 
</table>

<table id="anchor_40" class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">用户 user</th>
		</tr> 
		<tr> 
			<th width="30%">变量</th> 
			<th width="30%">类型</th>
			<th width="40%">说明</th> 
		</tr> 
	</thead> 
	<tbody> 
		<tr> 
			<td>id</td> 
			<td>long</td>
			<td>Id</td>
		</tr>
		<tr> 
			<td>userName</td> 
			<td>String</td>
			<td>会员用户名</td>
		</tr>
		<tr> 
			<td>account</td> 
			<td>String</td>
			<td>账号</td>
		</tr>
		<tr> 
			<td>issue</td> 
			<td>String</td>
			<td>密码提示问题</td>
		</tr>
		<tr> 
			<td>type</td> 
			<td>Integer</td>
			<td>用户类型</td>
		</tr>
	</tbody> 
</table>


<table class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">提交 找回密码第二步 - 默认方式</th>
		</tr> 
	</thead> 
	 <tbody> 
	 	<tr> 
			<td width="30%" >请求路径</td> 
			<td width="70%" colspan="2">findPassWord/step2.htm</td>
		</tr>
		<tr> 
			<td>请求方式</td> 
			<td colspan="2">POST</td>
		</tr>
		<tr> 
			<td>请求参数</td> 
			<td colspan="2"><a style="color: #317ee7" onclick="anchorJump('#anchor_600'); return false;">参数表</a></td>
		</tr>
		<tr> 
			<td>提交成功返回</td> 
			<td>默认跳转到jump模板页显示提交成功信息；跳转路径参数jumpUrl有值时按参数值路径跳转</td>
		</tr>
		<tr> 
			<td rowspan="2">提交失败返回</td> 
			<td>错误值</td> 
			<td width="30%" >
				变量：error<br>
				类型：<a style="color: #317ee7" onclick="anchorJump('#anchor_70'); return false;">Map&ltString,String></a><br>
			</td>
		</tr>
		<tr>
			<td>用户</td> 
			<td width="30%" >
				变量：user<br>
				类型：List&lt<a style="color: #317ee7" onclick="anchorJump('#anchor_40'); return false;">User</a>>
			</td>
		</tr>
	</tbody> 
</table>
<table class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">提交 找回密码第二步 - AJAX方式</th>
		</tr> 
	</thead> 
	 <tbody> 
	 	<tr> 
			<td>请求路径</td> 
			<td colspan="2">findPassWord/step2.htm</td>
		</tr>
		<tr> 
			<td>请求方式</td> 
			<td colspan="2">POST</td>
		</tr> 
		<tr> 
			<td>自定义请求头</td> 
			<td colspan="2">协议头：X-Requested-With  值：XMLHttpRequest</td>
		</tr>
		<tr> 
			<td>请求参数</td> 
			<td colspan="2"><a style="color: #317ee7" onclick="anchorJump('#anchor_600'); return false;">参数表</a></td>
		</tr>
		<tr> 
			<td width="30%" rowspan="3">提交返回</td> 
			<td width="30%" rowspan="3">JSON格式值 类型:Map&ltString,Object></td>
			<td width="40%">键参数：success<br>值内容说明：成功返回true 失败返回false<br>值类型：String</td> 
		</tr>
		<tr> 
			<td>键参数：error<br>值内容说明：错误值集合<br>值类型：<a style="color: #317ee7" onclick="anchorJump('#anchor_70'); return false;">Map&ltString,String></a></td> 
		</tr>
		<tr> 
			<td>键参数：captchaKey<br>值内容说明：验证码编号</td> 
		</tr>
		
	</tbody> 
</table>


<table class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">校验验证码</th>
		</tr> 
	</thead> 
	 <tbody> 
	 	<tr> 
			<td>请求路径</td> 
			<td colspan="2">checkCaptcha.htm</td>
		</tr>
		<tr> 
			<td>请求方式</td> 
			<td colspan="2">GET</td>
		</tr> 
		<tr> 
			<td>返回类型</td> 
			<td colspan="2">JSON</td>
		</tr> 
		<tr> 
			<td>必填参数</td> 
			<td colspan="2">
				captchaKey : 验证码编号<br>
				captchaValue : 验证码值  同一编号验证码每分钟提交次数不能超过60次,超出时验证码图片返回空字符
			</td>
		</tr>
		<tr> 
			<td width="30%" >提交返回</td> 
			<td width="30%" >字符串格式值 类型:String</td>
			<td width="40%">值内容说明：成功返回true 失败返回false<br>值类型：String</td> 
		</tr>
	</tbody> 
</table>
<table id="anchor_70"  class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">找回密码第二步 错误值 error</th>
		</tr> 
		<tr> 
			<th width="30%">变量</th> 
			<th width="30%">类型</th>
			<th width="40%">说明</th> 
		</tr> 
	</thead> 
	 <tbody> 
		<tr> 
			<td>user</td> 
			<td>String</td>
			<td>用户错误</td>
		</tr>
		<tr> 
			<td>account</td> 
			<td>String</td>
			<td>账号错误</td>
		</tr>
		<tr> 
			<td>password</td> 
			<td>String</td>
			<td>密码错误</td>
		</tr>
		<tr> 
			<td>answer</td> 
			<td>String</td>
			<td>密码提示答案</td>
		</tr>
		<tr> 
			<td>captchaValue</td> 
			<td>String</td>
			<td>验证码错误</td>
		</tr>
	 	<tr> 
			<td>token</td> 
			<td>String</td>
			<td>令牌错误</td>
		</tr>
		<tr> 
			<td>mobile</td> 
			<td>String</td>
			<td>手机号错误</td>
		</tr>
		<tr> 
			<td>smsCode</td> 
			<td>String</td>
			<td>手机号验证码错误</td>
		</tr>
	</tbody> 
</table>
<table id="anchor_80"  class="exampleTable" > 
	<thead> 
		<tr> 
			<th colspan="3">页面访问 错误值 error</th>
		</tr> 
		<tr> 
			<th width="30%">变量</th> 
			<th width="30%">类型</th>
			<th width="40%">说明</th> 
		</tr> 
	</thead> 
	 <tbody> 
	 	<tr> 
			<td>account</td> 
			<td>String</td>
			<td>账号错误</td>
		</tr>
	</tbody> 
</table>

<table id="anchor_600" class="exampleTable" > 
	<thead>
		<tr> 
			<th colspan="4">提交'找回密码第二步'参数</th>
		</tr>
		<tr> 
			<th width="30%">参数</th> 
			<th width="20%">类型</th> 
			<th width="10%">是否必填</th> 
			<th width="40%">说明</th> 
		</tr> 
	</thead> 
	 <tbody>
	 	<tr> 
			<td>userName</td> 
			<td>String</td>
			<td>按需填写</td>
			<td>会员用户名</td> 
		</tr>
		<tr> 
			<td>type</td> 
			<td>Integer</td>
			<td>是</td>
			<td>用户类型</td> 
		</tr>
		<tr> 
			<td>mobile</td> 
			<td>String</td>
			<td>按需填写</td>
			<td>手机号</td> 
		</tr>
	 	<tr> 
			<td>password</td> 
			<td>String</td>
			<td>是</td>
			<td>新密码 必须执行sha256一次</td> 
		</tr>
		<tr> 
			<td>answer</td> 
			<td>String</td>
			<td>是</td>
			<td>密码提示答案 必须执行sha256一次</td> 
		</tr>
		<tr> 
			<td>captchaKey</td> 
			<td>String</td>
			<td>是</td>
			<td>验证码编号</td> 
		</tr>
		<tr>
			<td>captchaValue</td> 
			<td>String</td>
			<td>是</td>
			<td>验证码值 同一编号验证码每分钟提交次数不能超过60次,超出时验证码图片返回空字符</td> 
		</tr>
		<tr> 
			<td>smsCode</td> 
			<td>String</td>
			<td>是</td>
			<td>手机验证码</td> 
		</tr>
		<tr> 
			<td>token</td> 
			<td>String</td>
			<td>是</td>
			<td>令牌</td> 
		</tr>
		<tr> 
			<td>jumpUrl</td> 
			<td>String</td>
			<td>否</td>
			<td>'提交表单 - 默认方式'提交成功后跳转路径,不填写默认跳转到表单提交页；参数必须经过encodeBase64URL编码后才能提交。例${encodeBase64URL('/index')}</td> 
		</tr>
	</tbody> 
</table>

<h2 style="margin:0;padding:0; margin-top: 10px;">示例</h2>
<textarea name="exampleCode">
<form method="post" action="findPassWord/step2.htm?userName=${url_userName}">
	<!-- 令牌标记 -->
	<input type="hidden" id="token" name="token" value="${token}">

	<#-- 账号 -->	
	${user.account}
	<#-- 账号 -->	
	${(error['account'])!}
	
	<#-- 密码提示问题 -->	
	${user.issue}
	
	<#-- 密码提示答案 -->	
	<input type="text" id="answer" name="answer"  value=""/>
	
	<#-- 密码提示答案错误 -->	
	${(error['answer'])!}

			
	<#-- 新密码 -->	
	<input type="password" id="password" name="password" value=""/>
	<#-- 密码错误 -->	
	${(error['password'])!}

	<#-- 验证码 -->
	<input type="hidden" id="captchaKey" name="captchaKey" value="${captchaKey}">
	<#-- 验证码值 -->
	<input id="captchaValue" name="captchaValue" type="text" value=""/>		
	<#-- 验证码图片 -->
	&ltimg id="captcha" src="captcha/${captchaKey!}.jpg"/>
	<#-- 验证码错误 -->
	${(error['captchaValue'])!}
	
	<#-- 修改用户错误 -->
	${error['user']}
	
	<#-- 令牌错误 -->
	${error['token']}
	
	<#-- '密码'和'密码提示答案'必须使用sha256加密一次才能提交 CryptoJS.SHA256(password) -->
	<input type="submit" value="默认提交" />
	
	<#-- ajax提交请看下面示例 -->
	<input type="button" value="ajax提交" onClick="javascript:ajaxSubmit();">
	
	
</form>


<#-- 组装提交参数 必须引入crypto-js-min.js -->
<script type="text/javascript" language="javascript"> 

//组装参数
function getParameter(){
	var parameter = "";
	//令牌标记
	var token = document.getElementById("token").value;
	parameter += "&token="+token;

	//验证码Key
	var captchaKey = document.getElementById("captchaKey");
	if(captchaKey != null){
		parameter += "&captchaKey="+encodeURIComponent(captchaKey.value);
	}
	//验证码值
	var captchaValue = document.getElementById("captchaValue");
	if(captchaValue != null){
		parameter += "&captchaValue="+encodeURIComponent(captchaValue.value);
	}

	//用户名
	var userName = getUrlParam("userName");
	parameter += "&userName="+encodeURIComponent(userName);
	
	//密码
	var password = document.getElementById("password").value;
	if(password != ""){
		//password在加密前要原始数据，不能进行任何转义
		parameter += "&password="+CryptoJS.SHA256(password);
	}
	
	
	//密码提示答案需SHA256加密
	var answer = document.getElementById("answer").value;
	if(answer != ""){
		//answer在加密前要原始数据，不能进行任何转义
		parameter += "&answer=" + CryptoJS.SHA256(answer);
	}
	
	//删除第一个&号,防止因为多了&号而出现警告: Parameters: Invalid chunk ignored.信息
	if(parameter.indexOf("&") == 0){
		parameter = parameter.substring(1,parameter.length);
	}
	return parameter;
}


<#-- ajax提交示例 -->
<script type="text/javascript" language="javascript"> 
	//ajax提交
	function ajaxSubmit(){
		//直接将组装好的参数提交即可
		var parameter = getParameter();
	
	}
</script>

</textarea>


